import Vue from 'vue'
import Vuex from 'vuex'
import { pathNormalize } from '../utils/BaseUtil'

Vue.use(Vuex)

class StoreModule {
    baseStoreModulesContext() {
        return require.context('./modules', true, /\.js$/)
    }
    getBaseStoreModules() {
        const context = this.baseStoreModulesContext()
        const modules = {}
        context.keys().forEach(modulePath => {
            const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
            const _module = context(modulePath)
            modules[moduleName] = _module.default || _module
        })
        return modules
    }
    getModuleFilesByContext(context, prefixPath) {
        return context.keys().map(modulePath => pathNormalize(prefixPath + modulePath))
    }
    getModuleFiles() {
        const baseModuleFiles = this.getModuleFilesByContext(this.baseStoreModulesContext(), './modules/')
        return baseModuleFiles.concat([])
    }
    getModules() {
        return this.getBaseStoreModules()
    }
}
const storeModule = new StoreModule()

const store = new Vuex.Store({
    state: {
    },
    mutations: {
    },
    actions: {

    },
    getters: {

    },
    modules: storeModule.getModules()
})
if (module.hot) {
    module.hot.accept(storeModule.getModuleFiles(), () => {
        store.hotUpdate({
            modules: storeModule.getModules()
        });
    });
}

export default store
